package com.myown.exception.enums;

/**
 * 异常枚举封装,nnnn.<p>
 * 0:sucess<p>
 * 0-1000:通用异常（json）<p>
 * 1000-2000:后台转发404页面<p>
 * 2000~:业务抛出异常（json）<p>
 * 一般开发中只需要抛出ServerRejectException自定义异常<p>
 * 详情如下:<p>
 * @author lincky
 * @version v1.0.0
 */
public enum ExpectionEnum {
    /* success */
    SUCCESS(0, "成功"),

    /* base */
    // **请求异常
    // 通常不使用
    BAD_REQUEST_EXCEPTION(1000, "请求不正确"),
    // **请求不存在异常
    // 通常不使用
    NOT_FOUND_EXCEPTION(1100, "请求资源不存在"),
    // **系统异常
    // 通常不使用
    SYSTEM_INNER_EXCEPTION(1200, "系统异常"),
    // **业务异常
    // 通常使用ServerRejectException(ExpectionEnum expectionEnum, ..)
    // 含参构造方法自定义异常，详情请见下面自定义异常枚举
    SERVER_REJECT_EXCEPTION(2000, "业务异常"),

    /* common */
    // 请求含有非法字符
    ILLEGAL_REQUEST(1, "请求含有非法字符"),
    // 验证码错误
    CAPTCHA_CODE_WRONG(2, "验证码错误"),
    CAPTCHA_NOT_FOUND(3, "验证码资源不存在"),
    // 用户账户
    USER_NOT_LOGONED(4, "账户未登录"),
    USER_LOGONED(5, "账户异地已登录")
    ;

    /* service */

    private int code;
    private String message;

    ExpectionEnum(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public static ExpectionEnum messageOf(int index) {
        for (ExpectionEnum seckillStateEnum : ExpectionEnum.values()) {
            if (seckillStateEnum.getCode() == index) {
                return seckillStateEnum;
            }
        }
        return null;
    }

    @Override
    public String toString() {
        return "ExpectionEnum{" +
                "code=" + code +
                ", message='" + message + '\'' +
                '}';
    }
}
